home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / MacHacksBug / Python 1.5.2c1 / Extensions / Imaging / PIL / MpegImagePlugin.py < prev    next >
Encoding:
Python Source  |  2000-06-23  |  1.6 KB  |  81 lines

  1. #
  2. # The Python Imaging Library.
  3. # $Id: MpegImagePlugin.py,v 1.1.1.1 1998/08/18 13:07:54 sjoerd Exp $
  4. #
  5. # MPEG file handling
  6. #
  7. # History:
  8. #    95-09-09 fl    Created
  9. #
  10. # Copyright (c) Secret Labs AB 1997.
  11. # Copyright (c) Fredrik Lundh 1995.
  12. #
  13. # See the README file for information on usage and redistribution.
  14. #
  15.  
  16. __version__ = "0.1"
  17.  
  18. import array, string
  19. import Image, ImageFile
  20.  
  21. #
  22. # Bitstream parser
  23.  
  24. class BitStream:
  25.  
  26.     def __init__(self, fp):
  27.     self.fp = fp
  28.     self.bits = 0
  29.     self.bitbuffer = 0
  30.  
  31.     def next(self):
  32.     return ord(self.fp.read(1))
  33.  
  34.     def peek(self, bits):
  35.     while self.bits < bits:
  36.         c = self.next()
  37.         if c < 0:
  38.         self.bits = 0
  39.         continue
  40.         self.bitbuffer = (self.bitbuffer << 8) + c
  41.         self.bits = self.bits + 8
  42.     return self.bitbuffer >> (self.bits - bits) & (1 << bits) - 1
  43.  
  44.     def skip(self, bits):
  45.     while self.bits < bits:
  46.         self.bitbuffer = (self.bitbuffer << 8) + ord(self.fp.read(1))
  47.         self.bits = self.bits + 8
  48.     self.bits = self.bits - bits
  49.  
  50.     def read(self, bits):
  51.     v = self.peek(bits)
  52.     self.bits = self.bits - bits
  53.     return v
  54.  
  55.  
  56. class MpegImageFile(ImageFile.ImageFile):
  57.  
  58.     format = "MPEG"
  59.     format_description = "MPEG"
  60.  
  61.     def _open(self):
  62.  
  63.     s = BitStream(self.fp)
  64.  
  65.     if s.read(32) != 0x1B3:
  66.         raise SyntaxError, "not an MPEG file"
  67.  
  68.     self.mode = "RGB"
  69.     self.size = s.read(12), s.read(12)
  70.  
  71.  
  72. # --------------------------------------------------------------------
  73. # Registry stuff
  74.  
  75. Image.register_open("MPEG", MpegImageFile)
  76.  
  77. Image.register_extension("MPEG", ".mpg")
  78. Image.register_extension("MPEG", ".mpeg")
  79.  
  80. Image.register_mime("MPEG", "video/mpeg")
  81.